package com.itheima.controller;

import com.itheima.pojo.Result;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@Slf4j
@RestController
public class SessionController {
    /**
     * - 响应头 Set-Cookie ：设置Cookie数据的。Set-Cookie:name=value
     * - 请求头 Cookie：携带Cookie数据的。Cookie：name=value
     */
    //配置Cookie
    @GetMapping("/c1")
    public Result cookie1(HttpServletResponse response){
        response.addCookie(new Cookie("login_username","itheima")); //设置Cookie,响应Cookie
        return Result.success();
    }

    //获取Cookie(浏览器在请求头中携带的cookie数据)
    @GetMapping("/c2")
    public Result cookie2(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();  //获取所有的cookie
        for (Cookie cookie : cookies) {
            //输出name为login_username的cookie
            if (cookie.getName().equals("login_username")){
                System.out.println("login_username:"+cookie.getValue());
            }
        }
        return Result.success();
    }


    /**
     * 每一个会话对象Session ，它都有一个ID,称之为 Session 的ID,基于cookie来实现的
     * 浏览器第一次请求服务器的时候，会创建一个会话对象session，服务器端在给浏览器响应数据的时候，会将 Session的ID通过Cookie响应给浏览器。
     * 其实在响应头当中增加了一个 Set-Cookie 响应头。这个 Set-Cookie响应头对应的值是cookie，响应：Set-Cookie:JSESSIONID=1，请求：Cookie：JSESSIONID=1
     * cookie 的名字是固定的 JSESSIONID 代表的服务器端会话对象 Session 的 ID。浏览器会自动识别这个响应头，然后自动将Cookie存储在浏览器本地。
     */
    //HttpSession中存储值
    @GetMapping("/s1")
    public Result session1(HttpSession session){
        log.info("HttpSession-s1:{}",session.hashCode());

        session.setAttribute("loginUser","tom");  //在session中存储数值
        return Result.success();
    }

    //获取值
    @GetMapping("/s2")
    public Result session2(HttpServletRequest request)
    {
        HttpSession session = request.getSession();
        log.info("HttpSession-s2:{}",session.hashCode());

        Object loginUser = session.getAttribute("loginUser");  //在session中获取数值
        log.info("loginUser:{}",loginUser);
        return Result.success(loginUser);
    }


}
